ä¿¡é Œæ§ã®é«ãããŒã¿äº€æã®ããã®ãããŒå¶åŸ¡æè¡ã«çŠç¹ãåœãŠããããã³ããšã³ãWebã¢ããªã±ãŒã·ã§ã³ã§ã®ã·ãªã¢ã«éä¿¡å®è£ ã«é¢ããå æ¬çãªã¬ã€ããWeb Serial APIãäžè¬çãªèª²é¡ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠåŠã³ãŸãã
ããã³ããšã³ãWebã·ãªã¢ã«ãããŒå¶åŸ¡ïŒã·ãªã¢ã«é信管çã®ãã¹ã¿ãŒ
Web Serial APIã¯ãã·ãªã¢ã«ããŒããä»ããŠããŒããŠã§ã¢ããã€ã¹ãšçŽæ¥éä¿¡ã§ããWebã¢ããªã±ãŒã·ã§ã³ã®å¯èœæ§ãåºããŸããããã¯ããã€ã¯ãã³ã³ãããŒã©ãŒïŒArduinoãESP32ãªã©ïŒãç§åŠæ©åšãç£æ¥çšæ©åšããã®ä»ã®çµã¿èŸŒã¿ã·ã¹ãã ãšå¯Ÿè©±ããã¢ããªã±ãŒã·ã§ã³ã«ç¹ã«åœ¹ç«ã¡ãŸãããã ããã·ãªã¢ã«éä¿¡ã確å®ã«ç®¡çããã«ã¯ãç¹ã«ããã€ã¹ã®æ©èœããããã¯ãŒã¯ã®ç¶æ³ãç°ãªãå Žåã¯ããããŒå¶åŸ¡ã«æ³šæãæãå¿ èŠããããŸãã
ã·ãªã¢ã«éä¿¡ã®åºæ¬ãçè§£ãã
ãããŒå¶åŸ¡ã«å ¥ãåã«ãã·ãªã¢ã«éä¿¡ã®åºæ¬ããŸãšããŸãããïŒ
- ã·ãªã¢ã«ããŒãïŒããã€ã¹ãããŒã¿ãäžåºŠã«1ããããã€éä¿¡ã§ããç©çã€ã³ã¿ãŒãã§ã€ã¹ïŒå€ãã®å ŽåãUSB-ã·ãªã¢ã«ïŒã
- ããŒã¬ãŒãïŒããŒã¿ãéä¿¡ãããé床ïŒ1ç§ãããã®ãããæ°ïŒãäž¡æ¹ã®ããã€ã¹ããã®é床ã«åæããå¿ èŠããããŸããäžè¬çãªããŒã¬ãŒãã«ã¯ã9600ã115200ãªã©ããããŸãã
- ããŒã¿ãããïŒåäžã®æåã衚ãããã«äœ¿çšããããããæ°ïŒéåžžã¯7ãŸãã¯8ïŒã
- ããªãã£ïŒãšã©ãŒæ€åºæ¹æ³ãå¶æ°ã奿°ããŸãã¯ãªãã«ããããšãã§ããŸãã
- ã¹ããããããïŒæåã®çµããã瀺ãããã«äœ¿çšããããããïŒéåžžã¯1ãŸãã¯2ïŒã
Web Serial APIã¯ããã©ãŠã¶ç°å¢å ã§ãããã®ã·ãªã¢ã«ããŒãèšå®ãæ§æããã³ç®¡çããããã®JavaScriptã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã
ãããŒå¶åŸ¡ãå¿ èŠãªçç±
ãããŒå¶åŸ¡ã¡ã«ããºã ã¯ãããŒã¿æå€±ãé²ããWebã¢ããªã±ãŒã·ã§ã³ãšæ¥ç¶ãããããã€ã¹éã®ä¿¡é Œæ§ã®é«ãéä¿¡ã確ä¿ããããã«äžå¯æ¬ ã§ããåé¡ã¯ã次ã®ããšãåå ã§çºçããå¯èœæ§ããããŸãã
- ããã€ã¹ãããã¡ã®ãªãŒããŒãããŒïŒããã€ã¹ãåŠçã§ãããããéãããŒã¿ãåä¿¡ããããŒã¿æå€±ã«ã€ãªããå¯èœæ§ããããŸãã
- ãããã¯ãŒã¯é å»¶ïŒWebã¢ããªã±ãŒã·ã§ã³ããããã¯ãŒã¯çµç±ã§ããã€ã¹ãšéä¿¡ããå ŽåïŒã·ãªã¢ã«-ãããã¯ãŒã¯ã³ã³ããŒã¿ãŒãªã©ïŒããããã¯ãŒã¯é å»¶ã«ããããŒã¿éä¿¡ã«é å»¶ãçããå¯èœæ§ããããŸãã
- å¯å€åŠçé床ïŒWebã¢ããªã±ãŒã·ã§ã³ã®åŠçé床ã¯ããã©ãŠã¶ããŠãŒã¶ãŒã®ãã·ã³ãããã³å®è¡äžã®ä»ã®ã¹ã¯ãªããã«ãã£ãŠç°ãªãå ŽåããããŸãã
ãããŒå¶åŸ¡ããªããšããããã®åé¡ã«ããããŒã¿ãç Žæããããéä¿¡ã倱æãããããå¯èœæ§ãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«å€§ããªåœ±é¿ãäžããŸãã
ã·ãªã¢ã«ãããŒå¶åŸ¡ã®çš®é¡
ã·ãªã¢ã«éä¿¡ã§äœ¿çšããããããŒå¶åŸ¡ã«ã¯ãäž»ã«2ã€ã®ã¿ã€ãããããŸãã
1.ããŒããŠã§ã¢ãããŒå¶åŸ¡ïŒRTS/CTSïŒ
ããŒããŠã§ã¢ãããŒå¶åŸ¡ã¯ãå°çšã®ããŒããŠã§ã¢ã©ã€ã³ïŒRTS - Request To Sendãããã³CTS - Clear To SendïŒã䜿çšããŠãããã€ã¹ãããŒã¿ãåä¿¡ããæºåãã§ããŠããããšãéç¥ããŸãã
- RTSïŒRequest To SendïŒïŒéä¿¡ããã€ã¹ã«ãã£ãŠã¢ãµãŒããããéä¿¡ããããŒã¿ãããããšã瀺ããŸãã
- CTSïŒClear To SendïŒïŒåä¿¡ããã€ã¹ã«ãã£ãŠã¢ãµãŒããããããŒã¿ãåä¿¡ããæºåãã§ããŠããããšã瀺ããŸãã
éä¿¡ããã€ã¹ã¯ãCTSã©ã€ã³ãã¢ãµãŒããããŠããå Žåã«ã®ã¿ããŒã¿ãéä¿¡ããŸããããã«ããããããã¡ãªãŒããŒãããŒãé²ãããã®ä¿¡é Œæ§ã®é«ãããŒããŠã§ã¢ããŒã¹ã®ã¡ã«ããºã ãæäŸãããŸããWeb Serial APIã§ã¯ãããŒãæ§æäžã«ããŒããŠã§ã¢ãããŒå¶åŸ¡ãæå¹ã«ããŸãã
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 115200, flowControl: "hardware" });
å©ç¹ïŒ
- ä¿¡é Œæ§ãé«ãã
- ããŒããŠã§ã¢ã¬ãã«ã®å®è£ ã¯ãéåžžãããé«éã§å¹ççã§ãã
çæïŒ
- å°çšã®ããŒããŠã§ã¢ã©ã€ã³ãå¿ èŠã§ããããã¹ãŠã®ããã€ã¹ã§äœ¿çšã§ãããšã¯éããŸããã
- ç©ççãªæ¥ç¶ãè€éã«ãªãå¯èœæ§ããããŸãã
äŸïŒCNCãã·ã³ãå¶åŸ¡ããWebã¢ããªã±ãŒã·ã§ã³ãæ³åããŠãã ãããCNCãã·ã³ã«ã¯ãéããããããã¡ãããå ŽåããããŸããããŒããŠã§ã¢ãããŒå¶åŸ¡ã«ãããWebã¢ããªã±ãŒã·ã§ã³ã¯CNCãã·ã³ãåŠçã§ããç¶æ ã«ãªã£ãå Žåã«ã®ã¿ã³ãã³ããéä¿¡ããããŒã¿æå€±ãé²ããæ£ç¢ºãªåäœãä¿èšŒããŸãã
2.ãœãããŠã§ã¢ãããŒå¶åŸ¡ïŒXON/XOFFïŒ
ãœãããŠã§ã¢ãããŒå¶åŸ¡ã¯ãç¹å¥ãªæåïŒXON - Transmit Onãããã³XOFF - Transmit OffïŒã䜿çšããŠãããã€ã¹ãããŒã¿ãåä¿¡ããæºåãã§ããŠããããšãéç¥ããŸãããããã®æåã¯ãããŒã¿ã¹ããªãŒã èªäœå ã§éä¿¡ãããŸãã
- XOFFïŒTransmit OffïŒïŒåä¿¡ããã€ã¹ã«ãã£ãŠéä¿¡ãããéä¿¡ããã€ã¹ã«ããŒã¿ã®éä¿¡ã忢ããããã«æç€ºããŸãã
- XONïŒTransmit OnïŒïŒåä¿¡ããã€ã¹ã«ãã£ãŠéä¿¡ãããéä¿¡ããã€ã¹ã«ããŒã¿ã®éä¿¡ãåéããããã«æç€ºããŸãã
Web Serial APIã¯ãæ§æãªãã·ã§ã³ãä»ããŠXON/XOFFãããŒå¶åŸ¡ãçŽæ¥ãµããŒãããŠããŸãããå®è£ ããã«ã¯ãJavaScriptã³ãŒãã§XONæåãšXOFFæåãæåã§åŠçããå¿ èŠããããŸãã
å©ç¹ïŒ
- å°çšã®ããŒããŠã§ã¢ãããŒå¶åŸ¡ã©ã€ã³ããªãããã€ã¹ã§äœ¿çšã§ããŸãã
- ããŒããŠã§ã¢ã®ã»ããã¢ãããç°¡åã§ãã
çæïŒ
- XON/XOFFæåèªäœã倱ããããç Žæãããããå¯èœæ§ããããããããŒããŠã§ã¢ãããŒå¶åŸ¡ã»ã©ä¿¡é Œæ§ãé«ããããŸããã
- XON/XOFFæåãä»ã®ç®çã«ã䜿çšãããŠããå ŽåãããŒã¿ã¹ããªãŒã ã劚ããå¯èœæ§ããããŸãã
- ããè€éãªãœãããŠã§ã¢å®è£ ãå¿ èŠã§ãã
äŸïŒã»ã³ãµãŒãããŒã¿ãWebã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããããšãæ€èšããŠãã ãããWebã¢ããªã±ãŒã·ã§ã³ã®åŠçè² è·ãå¢å ãããšãXOFFæåãã»ã³ãµãŒã«éä¿¡ããŠãããŒã¿éä¿¡ãäžæçã«äžæåæ¢ã§ããŸããåŠçè² è·ã軜æžããããšãWebã¢ããªã±ãŒã·ã§ã³ã¯XONæåãéä¿¡ããŠãããŒã¿éä¿¡ãåéããŸããããã«ãããWebã¢ããªã±ãŒã·ã§ã³ãéè² è·ã®ããã«ããŒã¿ãã€ã³ããèŠéãããšããªããªããŸãã
Web Serial APIã䜿çšãããœãããŠã§ã¢ãããŒå¶åŸ¡ã®å®è£
Web Serial APIã«ã¯XON/XOFFãµããŒããçµã¿èŸŒãŸããŠããªããããæåã§å®è£ ããå¿ èŠããããŸããåºæ¬çãªã¢ãããŒãã¯æ¬¡ã®ãšããã§ãã
- XONæåãšXOFFæåãå®çŸ©ããŸãïŒXONãšXOFFã«äœ¿çšããç¹å®ã®æåãå®çŸ©ããŸãããããã¯å€ãã®å ŽåãASCIIå¶åŸ¡æåã§ãïŒããšãã°ãXONã®å Žåã¯0x11ãXOFFã®å Žåã¯0x13ïŒã
- ããŒã¿ãããã¡ãå®è£ ããŸãïŒåä¿¡ããŒã¿ãä¿åããããã«ãJavaScriptã³ãŒãã§ãããã¡ãäœæããŸãã
- ãããã¡ãµã€ãºãç£èŠããŸãïŒãããã¡ã®ãµã€ãºã宿çã«ç¢ºèªããŸãã
- ãããã¡ã容éã«è¿ã¥ãããXOFFãéä¿¡ããŸãïŒãããã¡ããããããå€ã«éãããšãXOFFæåãããã€ã¹ã«éä¿¡ããŠãéä¿¡ãäžæåæ¢ããŸãã
- ãããã¡ã«ã¹ããŒã¹ãããå Žåã¯XONãéä¿¡ããŸãïŒãããã¡ã«ååãªã¹ããŒã¹ãããå Žåã¯ãXONæåãããã€ã¹ã«éä¿¡ããŠãéä¿¡ãåéããŸãã
- åä¿¡ããŒã¿ã¹ããªãŒã ã§XON/XOFFæåãåŠçããŸãïŒåŠçããåã«ãåä¿¡ããŒã¿ããXON/XOFFæåããã£ã«ã¿ãªã³ã°ããŸãã
次ã«ããããå®è£ ããæ¹æ³ã®ç°¡åãªäŸã瀺ããŸãã
const XON = 0x11;
const XOFF = 0x13;
const BUFFER_SIZE = 1024;
const BUFFER_THRESHOLD = 800;
let dataBuffer = [];
let isTransmitting = true;
async function readSerialData(reader, writer) {
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
console.log("Reader done!");
break;
}
// Convert Uint8Array to string
const receivedString = new TextDecoder().decode(value);
// Filter out XON/XOFF characters (if present in the received string)
const filteredString = receivedString.replace(/\u0011/g, '').replace(/\u0013/g, '');
// Add data to buffer
dataBuffer.push(filteredString);
// Check buffer size
if (dataBuffer.join('').length > BUFFER_THRESHOLD && isTransmitting) {
console.log("Sending XOFF");
const encoder = new TextEncoder();
await writer.write(encoder.encode(String.fromCharCode(XOFF)));
isTransmitting = false;
}
// Process data (example: log to console)
console.log("Received:", filteredString);
// Example: Clear the buffer and resume transmission after processing
if (dataBuffer.join('').length < BUFFER_THRESHOLD / 2 && !isTransmitting) {
console.log("Sending XON");
const encoder = new TextEncoder();
await writer.write(encoder.encode(String.fromCharCode(XON)));
isTransmitting = true;
dataBuffer = []; // Clear the buffer after processing
}
}
} catch (error) {
console.error("Serial read error:", error);
} finally {
reader.releaseLock();
}
}
async function writeSerialData(writer, data) {
const encoder = new TextEncoder();
await writer.write(encoder.encode(data));
await writer.close();
}
async function openSerialPort() {
try {
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 115200 });
const reader = port.readable.getReader();
const writer = port.writable.getWriter();
readSerialData(reader, writer);
} catch (error) {
console.error("Serial port error:", error);
}
}
// Example usage:
openSerialPort();
XON/XOFFã«é¢ããéèŠãªèæ ®äºé ïŒ
- XON/XOFFæåã®éžæïŒéåžžã®ããŒã¿ã¹ããªãŒã ã«è¡šç€ºãããå¯èœæ§ãäœãæåãéžæããŸãã
- ãšã©ãŒåŠçïŒå€±ããããç ŽæãããããXON/XOFFæåãåŠçããããã®ãšã©ãŒåŠçãå®è£ ããŸããããã«ã¯ãã¿ã€ã ã¢ãŠããšåéä¿¡æŠç¥ãå«ãŸããå ŽåããããŸãã
- ã¿ã€ãã³ã°ïŒXON/XOFFæåãéä¿¡ããã¿ã€ãã³ã°ã¯éèŠã§ãããããã¡ãå®å šã«ãã£ã±ãã«ãªãåã«XOFFãéä¿¡ããååãªã¹ããŒã¹ãããå Žåã¯XONãéä¿¡ããŸãã
- ããã€ã¹ã®ãµããŒãïŒéä¿¡ããŠããããã€ã¹ãå®éã«XON/XOFFãããŒå¶åŸ¡ããµããŒãããŠãããåãXON/XOFFæåã䜿çšããŠããããšã確èªããŸãã
Webã·ãªã¢ã«ãããŒå¶åŸ¡ã®ãã¹ããã©ã¯ãã£ã¹
Webã¢ããªã±ãŒã·ã§ã³ã§ã·ãªã¢ã«éä¿¡ãšãããŒå¶åŸ¡ãå®è£ ããããã®äžè¬çãªãã¹ããã©ã¯ãã£ã¹ã次ã«ç€ºããŸãã
- å¯èœãªå Žåã¯ããŒããŠã§ã¢ãããŒå¶åŸ¡ã䜿çšããŸãïŒããŒããŠã§ã¢ãããŒå¶åŸ¡ïŒRTS/CTSïŒã¯ãéåžžããœãããŠã§ã¢ãããŒå¶åŸ¡ïŒXON/XOFFïŒãããä¿¡é Œæ§ãé«ãå¹ççã§ããå¯èœãªéã䜿çšããŠãã ããã
- ããã€ã¹ã®æ©èœãçè§£ããïŒéä¿¡ããŠããããã€ã¹ã®ããã¥ã¡ã³ããæ³šææ·±ã確èªããŠããããŒå¶åŸ¡ã®æ©èœãšèŠä»¶ãçè§£ããŸãã
- ãšã©ãŒåŠçãå®è£ ããïŒéä¿¡é害ãããŒã¿ç Žæãããã³ãã®ä»ã®äºæããªãã€ãã³ããåŠçããã«ã¯ãå ç¢ãªãšã©ãŒåŠçãäžå¯æ¬ ã§ãã
- éåææäœã䜿çšããïŒWeb Serial APIã¯éåæã§ãããããåžžã«`async/await`ãŸãã¯Promisesã䜿çšããŠã·ãªã¢ã«éä¿¡æäœãåŠçããŸããããã«ãããã¡ã€ã³ã¹ã¬ããããããã¯ãããã®ãé²ããå¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã確ä¿ããŸãã
- 培åºçã«ãã¹ãããïŒç°ãªãããã€ã¹ããããã¯ãŒã¯æ¡ä»¶ãããã³ãã©ãŠã¶ããŒãžã§ã³ã§ã·ãªã¢ã«éä¿¡ã®å®è£ ã培åºçã«ãã¹ãããŠãä¿¡é Œæ§ã確èªããŸãã
- ããŒã¿ãšã³ã³ãŒãã£ã³ã°ãæ€èšããïŒé©åãªããŒã¿ãšã³ã³ãŒãã£ã³ã°åœ¢åŒïŒUTF-8ãASCIIãªã©ïŒãéžæããWebã¢ããªã±ãŒã·ã§ã³ãšããã€ã¹ã®äž¡æ¹ãåããšã³ã³ãŒãã£ã³ã°ã䜿çšããŠããããšã確èªããŸãã
- åæãæ£åžžã«åŠçããïŒåæãæ€åºããŠæ£åžžã«åŠçããããžãã¯ãå®è£ ããŸããããã«ã¯ããŠãŒã¶ãŒã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããããããã€ã¹ãžã®åæ¥ç¶ã詊è¡ãããããããšãå«ãŸããå ŽåããããŸãã
- ã»ãã¥ãªãã£ã«æ³šæããïŒã·ãªã¢ã«ããŒããWebã¢ããªã±ãŒã·ã§ã³ã«å ¬éããããšã®ã»ãã¥ãªãã£ãžã®åœ±é¿ã«æ³šæããŠãã ãããããã€ã¹ããåä¿¡ããããŒã¿ããµãã¿ã€ãºããŠãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒã®è匱æ§ãé²ããŸããä¿¡é Œã§ããããã€ã¹ã«ã®ã¿æ¥ç¶ããŠãã ããã
ã°ããŒãã«ãªèæ ®äºé
ã·ãªã¢ã«ããŒããä»ããŠããŒããŠã§ã¢ããã€ã¹ãšå¯Ÿè©±ããWebã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã¯ã次ã®ã°ããŒãã«ãªèŠçŽ ãèæ ®ããããšãéèŠã§ãã
- åœéåïŒi18nïŒïŒããŸããŸãªèšèªãšæåã»ããããµããŒãããããã«ã¢ããªã±ãŒã·ã§ã³ãèšèšããŸããããŒã¿äŒéãšè¡šç€ºã«ã¯ãUnicodeãšã³ã³ãŒãã£ã³ã°ïŒUTF-8ïŒã䜿çšããŸãã
- ããŒã«ãªãŒãŒã·ã§ã³ïŒl10nïŒïŒæ¥ä»ãšæå»ã®åœ¢åŒãæ°å€åœ¢åŒãé貚èšå·ãªã©ãããŸããŸãªå°åèšå®ã«åãããŠã¢ããªã±ãŒã·ã§ã³ã調æŽããŸãã
- ã¿ã€ã ãŸãŒã³ïŒã¿ã€ã ã¹ã¿ã³ããåŠçããããã¿ã¹ã¯ãã¹ã±ãžã¥ãŒã«ãããããå Žåã¯ãã¿ã€ã ãŸãŒã³ã«æ³šæããŠãã ãããã¿ã€ã ã¹ã¿ã³ããå éšçã«ä¿åããã«ã¯UTCïŒåå®äžçæïŒã䜿çšãã衚瀺ã®ããã«ãŠãŒã¶ãŒã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æããŸãã
- ããŒããŠã§ã¢ã®å¯çšæ§ïŒå°åããšã®ç¹å®ã®ããŒããŠã§ã¢ã³ã³ããŒãã³ãã®å¯çšæ§ãèæ ®ããŸããã¢ããªã±ãŒã·ã§ã³ãç¹å®ã®ã·ãªã¢ã«-USBã¢ããã¿ãŒã«äŸåããŠããå Žåã¯ãã¿ãŒã²ããåžå Žã§ç°¡åã«å©çšã§ããããšã確èªããŠãã ããã
- èŠå¶éµå®ïŒããŸããŸãªåœã§ã®ããŒã¿ãã©ã€ãã·ãŒãã»ãã¥ãªãã£ããŸãã¯ããŒããŠã§ã¢ã®äºææ§ã«é¢é£ããèŠå¶èŠä»¶ã«æ³šæããŠãã ããã
- æåçæåæ§ïŒãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšããã¥ã¡ã³ããæåçæåæ§ã念é ã«çœ®ããŠèšèšããŸããç¹å®ã®æåã§äžå¿«ãŸãã¯äžé©åã§ããå¯èœæ§ã®ããç»åãèšå·ããŸãã¯èšèªã®äœ¿çšã¯é¿ããŠãã ããã
ããšãã°ãæ£è ã®ããŒã¿ãã·ãªã¢ã«æ¥ç¶ãä»ããŠWebã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããå»çæ©åšã¯ãç±³åœã®HIPAAèŠå¶ãšãšãŒãããã®GDPRã«æºæ ããå¿ èŠããããŸããWebã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºãããããŒã¿ã¯ããŠãŒã¶ãŒã®åªå èšèªã«ããŒã«ã©ã€ãºãããå°åã®ããŒã¿ãã©ã€ãã·ãŒèŠå¶ã«æºæ ããå¿ èŠããããŸãã
äžè¬çãªåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
Web Serial APIãšãããŒå¶åŸ¡ã䜿çšããéã«çºçããå¯èœæ§ã®ããäžè¬çãªåé¡ãšãèãããã解決çãæ¬¡ã«ç€ºããŸãã
- ããŒã¿æå€±ïŒé©åãªãããŒå¶åŸ¡ã䜿çšããŠãããããŒã¬ãŒããWebã¢ããªã±ãŒã·ã§ã³ãšããã€ã¹ã®äž¡æ¹ã§æ£ããæ§æãããŠããããšã確èªããŸãããããã¡ãªãŒããŒãããŒã確èªããŸãã
- éä¿¡ãšã©ãŒïŒã·ãªã¢ã«ããŒãã®èšå®ïŒããŒã¬ãŒããããŒã¿ããããããªãã£ãã¹ããããããïŒãäž¡åŽã§æ£ããæ§æãããŠããããšã確èªããŸããé ç·äžã®åé¡ãã±ãŒãã«ã®æ¬ é¥ããªãã確èªããŠãã ããã
- ãã©ãŠã¶ã®äºææ§ïŒWeb Serial APIã¯ãChromeãEdgeãªã©ã®ææ°ã®ãã©ãŠã¶ã§åºããµããŒããããŠããŸãããAPIãå©çšã§ããªãå Žåã«ã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«åŠçãããããã«ããŠãã ããã代æ¿ãœãªã¥ãŒã·ã§ã³ãŸãã¯æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããŸãã
- æš©éã®åé¡ïŒãŠãŒã¶ãŒã¯ãWebã¢ããªã±ãŒã·ã§ã³ãã·ãªã¢ã«ããŒãã«ã¢ã¯ã»ã¹ããããã®æš©éãæç€ºçã«ä»äžããå¿ èŠããããŸããæš©éãä»äžããæ¹æ³ã«ã€ããŠããŠãŒã¶ãŒã«æç¢ºãªæç€ºãæäŸããŸãã
- ãã©ã€ããŒã®åé¡ïŒãŠãŒã¶ãŒã®ã·ã¹ãã ã«ã·ãªã¢ã«-USBã¢ããã¿ãŒã«å¿ èŠãªãã©ã€ããŒãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŸãã
çµè«
Web Serial APIã䜿çšããã·ãªã¢ã«éä¿¡ãšãããŒå¶åŸ¡ã®ç¿åŸã¯ãããŒããŠã§ã¢ããã€ã¹ãšå¯Ÿè©±ããä¿¡é Œæ§ãé«ãå ç¢ãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããã·ãªã¢ã«éä¿¡ã®åºæ¬ãããŸããŸãªã¿ã€ãã®ãããŒå¶åŸ¡ãããã³ãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãWeb Serial APIã®å¯èœæ§ãæå€§éã«æŽ»çšã§ãã匷åãªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããã°ããŒãã«ãªèŠçŽ ãèæ ®ãã培åºçãªãã¹ãã宿œããŠãã¢ããªã±ãŒã·ã§ã³ãäžçäžã®ãŠãŒã¶ãŒã«å¯ŸããŠã·ãŒã ã¬ã¹ã«åäœããããã«ããããšãå¿ããªãã§ãã ãããå¯èœãªå Žåã¯ããŒããŠã§ã¢ãããŒå¶åŸ¡ã䜿çšããå¿ èŠã«å¿ããŠå ç¢ãªãšã©ãŒåŠçãšXON/XOFFãœãããŠã§ã¢ãããŒå¶åŸ¡ãå®è£ ãããšãWebã·ãªã¢ã«ã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžããŸãã